package com.zhuhjay.common.security.context;

import java.util.HashMap;
import java.util.Map;

import static com.zhuhjay.common.base.constant.ApplicationConstant.*;

/**
 * <p>
 *     登录用户上下文, 用于存储登录用户信息(为了让底层模块能够获取到登录用户信息)
 * </p>
 * <b>
 *     需要及时清理数据，防止内存泄漏
 * </b>
 * @author ZhuHJay
 * @date 2023/2/25 23:55
 */
public class LoginUserContext {

    /** 保存用户数据 **/
    private static final ThreadLocal<Map<String, Object>> THREAD_LOCAL = new ThreadLocal<>();

    /** 设置数据 **/
    public static void put(String key, Object value) {
        Map<String, Object> map = THREAD_LOCAL.get();
        if (map == null) {
            map = new HashMap<>(4);
            THREAD_LOCAL.set(map);
        }
        map.put(key, value);
    }

    /** 获取数据 **/
    public static Object get(String key) {
        final Map<String, Object> map = THREAD_LOCAL.get();
        if (map == null) {
            return null;
        }
        return map.get(key);
    }

    /** 设置用户名 **/
    public static void setUsername(String username) {
        put(USER_NAME_KEY, username);
    }

    /** 设置用户id **/
    public static void setUserId(Integer userId) {
        put(USER_ID_KEY, userId);
    }

    /** 设置用户唯一uid **/
    public static void setUid(String uid) {
        put(USER_UNIQUE_ID_KEY, uid);
    }

    /** 获取用户名 **/
    public static String getUsername() {
        return (String) get(USER_NAME_KEY);
    }

    /** 获取用户id **/
    public static Integer getUserId() {
        return (Integer) get(USER_ID_KEY);
    }

    /** 获取用户唯一uid **/
    public static String getUid() {
        return (String) get(USER_UNIQUE_ID_KEY);
    }

    /** 清理数据 **/
    public static void clear() {
        THREAD_LOCAL.remove();
    }
}
